/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle.gui.frames;

import controle.gui.frames.internos.ControleUsuariosAgentes;
import controle.gui.utils.setEnabledGUIElements;
import controle.interfaces.Constantes;
import controle.utils.Datas;
import controle.utils.Horas;
import gui.frames.FramePrincipal;
import gui.frames.internos.IFAlteraSenha;
import gui.frames.internos.IFBoletimPesquisa;
import gui.frames.internos.IFBoletimTratamento;
import gui.frames.internos.IFBoletinsPendentes;
import gui.frames.internos.IFImoveis;
import gui.frames.internos.IFLocalidades;
import gui.frames.internos.IFLogin;
import gui.frames.internos.IFLogradouros;
import gui.frames.internos.IFMunicipios;
import gui.frames.internos.IFQuadras;
import gui.frames.internos.IFSobre;
import gui.frames.internos.IFUsuariosAgentes;
import gui.frames.internos.relatorios.IFLogUsuarios;
import gui.frames.internos.relatorios.IFRelatorioBoletins;
import gui.frames.internos.relatorios.IFResumoSemanal;
import java.util.List;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import modelo.Acessos;
import modelo.Agente;
import modelo.Configuracao;
import modelo.Permissao;
import persistencia.dao.AbstractDAO;
import persistencia.dao.TransacaoDAO;
import persistencia.session.hibernateSessionFactory;

/**
 *
 * @author Maycon Fernando Silva Brito
 * @email mayconfsbrito@gmail.com
 */
public class ControleFramePrincipal {

    /*
     * Variáveis da classe
     */
    private static FramePrincipal frame = null;
    public static int qtdIFSinc = 0;
    /*
     * Variáveis manuais estáticas de controle de usuário do sistema
     */
    public static Agente user;
    public static List<Acessos> acessos;
    /*
     * Variáveis locais
     */
    protected static String[] botoesOpcoes = {"Sim", "Não"};


    /*
     * Construtor que instancia o frame
     */
    public ControleFramePrincipal(FramePrincipal frame) {
        this.frame = frame;
    }

    /*
     * Inicializa o Look and Feel da GUI
     */
    public void inicializaTema() {
        try {
            boolean nimbus = false;
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    nimbus = true;
                    break;
                }
            }

            if (!nimbus) {
                if (System.getProperty("os.name").equals("Linux")) {
                    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
                } else {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                }
            }


        } catch (Exception er) {
            JOptionPane.showMessageDialog(frame, "Não foi possível inicializar o tema Look and Feel da interface gráfica.\n" + er, "Erro",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

    /*
     * Inicializa as opções padrões de inicialização da GUI
     */
    public void inicializa() {
        try {
            this.verificaBDs();
            //frame.getTextMenssagem().setEditable(false);
            //frame.getTextMenssagem().setText("Seja bem vindo!");
            this.primeiroAcesso();
            ControleFramePrincipal.desconectaUsuario();

            /*
             * Verifica registros de transações dos usuários que extrapolaram o
             * prazo definido em preferências.conf
             */
            this.eliminaTransacoesVencidas();

            this.abreIFLogin();

        } catch (Exception er) {
            JOptionPane.showMessageDialog(frame, "Erro ao acessar o sistema! Se o problema persistir contacte o administrador do sistema.\n" + er, "Error", JOptionPane.ERROR_MESSAGE);
            er.printStackTrace();
        }
    }

    /**
     * Fecha todos os InternalFrames do DesktopPanel
     */
    public static void fechaTodosFramesInternos() {
        JInternalFrame[] frames = FramePrincipal.desktopPanel.getAllFrames();

        for (int index = 0; index < frames.length; index++) {
            frames[index].dispose();
        }
    }

    /**
     * Verifica se os banco de dados existem e em caso negativo cria-os
     */
    private void verificaBDs() {
        try {

            hibernateSessionFactory.getSession().beginTransaction();
            hibernateSessionFactory.getSession().flush();
            hibernateSessionFactory.getSession().close();

        } catch (Exception ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(frame, "Banco de Dados não encontrado!\n"
                    + "Favor instalar o banco de dados antes de iniciar a aplicação!", "Erro!", JOptionPane.ERROR_MESSAGE);


            System.exit(1);
        }
    }

    /**
     * Realiza os procedimentos de conexão de um usuário ao sistema
     *
     * @param user - Usuario a ser conectado
     * @return - Confirma que o usuário está conectado
     */
    public static boolean conectaUsuario(Agente user) {
        /*
         * Instancia o usuário
         */
        ControleFramePrincipal.user = user;

        /*
         * Configura a barra lateral de usuários
         */
        frame.labelConectado.setVisible(true);
        frame.labelDesconectado.setVisible(false);
        frame.labelUsuario.setText(user.getNome());

        return true;
    }

    /**
     * Realiza os procedimentos de conexão de um usuário ao sistema
     *
     * @param user - Usuario a ser conectado
     * @return - Confirma que o usuário está conectado
     */
    public static boolean desconectaUsuario() {
        /*
         * Instancia o usuário
         */
        ControleFramePrincipal.user = null;

        /*
         * Configura a barra lateral de usuários
         */
        frame.labelConectado.setVisible(false);
        frame.labelDesconectado.setVisible(true);
        frame.labelUsuario.setText("Usuario Desconectado");

        /*
         * Fecha todos os frames internos
         */
        ControleFramePrincipal.fechaTodosFramesInternos();

        /*
         * Configura o comportamento de todos os elementos do FramePrincipal
         */
        setEnabledGUIElements.disabledJComponent(FramePrincipal.buttonLogoff, frame.menuOpcoes, frame.menuBoletins, frame.menuLaboratorio, frame.menuLocais, frame.menuOpcoes, frame.menuRelatorio);
        setEnabledGUIElements.enabledJComponent(FramePrincipal.buttonLogin);


        return true;
    }

    /**
     * Inicializa os componentes deste frame a partir das permissões do usuário
     * verificando os acessos do mesmo
     *
     * @return - confirma o sucesso da aplicação do método
     */
    public static boolean verificaAcessos() {

        //Permite acesso a todos os componentes livres para qualquer usuário
        setEnabledGUIElements.enabledJComponent(frame.menuOpcoes, frame.menuBoletins, frame.menuLocais, frame.menuLaboratorio, frame.menuOpcoes, frame.menuRelatorio);

        //Recupera os acessos do usuario no bd
        ControleFramePrincipal.getPermissaoUsuarioUser();

        /*
         * Verifica o acesso para alteração nas preferências do sistema
         */
        if (acessos.get(Constantes.PERMISSAO_ALTERA_PREFERENCIAS).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuOpcoes, frame.menuItemPreferencias);
        } else {
            setEnabledGUIElements.disabledJComponent(frame.menuItemPreferencias);
        }

        /*
         * Verifica o acesso para consulta de usuários do sistema
         */
        if (acessos.get(Constantes.PERMISSAO_CONSULTA_USUARIOS).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuOpcoes, frame.menuItemUsuariosGerenciar);
        } else {
            setEnabledGUIElements.disabledJComponent(frame.menuItemUsuariosGerenciar);
        }

        /*
         * Verifica se o usuário tem permissão para consultar boletins de
         * tratamento
         */
        if (acessos.get(Constantes.PERMISSAO_CONSULTA_BOLETIM_TRATAMENTO).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuBoletins, frame.menuItemBoletinsTratamento);
        } else {
            setEnabledGUIElements.disabledJComponent(frame.menuBoletins, frame.menuItemBoletinsTratamento);
        }

        /*
         * Verifica se o usuário tem permissão para consultar boletins de
         * pesquisa
         */
        if (acessos.get(Constantes.PERMISSAO_CONSULTA_BOLETIM_PESQUISA).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuBoletins, frame.menuItemBoletinsPesquisa);
        } else {
            setEnabledGUIElements.disabledJComponent(frame.menuItemBoletinsPesquisa);

            if (!acessos.get(Constantes.PERMISSAO_CONSULTA_BOLETIM_TRATAMENTO).isAcesso()) {
                frame.menuBoletins.setEnabled(false);
            }
        }

        /*
         * Verifica se o usuário tem permissão para consultar locais
         */
        if (acessos.get(Constantes.PERMISSAO_CONSULTA_LOCAIS).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuLocais, frame.menuItemMunicipio, frame.menuItemLocalidade,
                    frame.menuItemQuadra, frame.menuItemLograouro, frame.menuItemImovel);
        } else {
            setEnabledGUIElements.disabledJComponent(frame.menuLocais, frame.menuItemMunicipio, frame.menuItemLocalidade,
                    frame.menuItemQuadra, frame.menuItemLograouro, frame.menuItemImovel);
        }

        /*
         * Verifica se o usuário tem permissão para consultar croquis
         */
        if (acessos.get(Constantes.PERMISSAO_CONSULTA_CROQUI).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuLocais);
        } else {
            if (!acessos.get(Constantes.PERMISSAO_CONSULTA_LOCAIS).isAcesso()) {
                setEnabledGUIElements.disabledJComponent(frame.menuLocais);
            }
        }

        /*
         * Verifica se o usuário tem permissão para consultar o Laboratório
         */
        if (acessos.get(Constantes.PERMISSAO_CONSULTA_LABORATORIO).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuLaboratorio, frame.menuItemLabBoletinsPendentes);
        } else {
            setEnabledGUIElements.disabledJComponent(frame.menuLaboratorio, frame.menuItemLabBoletinsPendentes);
        }

        /*
         * Verifica se o usuário tem permissão para imprimir relatórios de
         * resumo semanal de boletins diários
         */
        if (acessos.get(Constantes.PERMISSAO_IMPRIMIR_RELATORIO_RESUMO_SEMANAL_BOLETINS).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuItemResumoSemanal);
        } else {
            setEnabledGUIElements.disabledJComponent(frame.menuItemResumoSemanal);
        }

        /*
         * Verifica se o usuário tem permissão para imprimir relatórios das
         * transações realizadas por cada usuário
         */
        if (acessos.get(Constantes.PERMISSAO_IMPRIMIR_RELATORIO_TRANSACOES_USUARIOS).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuItemLogUsuarios);
        } else {
            setEnabledGUIElements.disabledJComponent(frame.menuItemLogUsuarios);
        }

        /*
         * Verifica se o usuário tem permissão para imprimir relatórios de
         * boletins diários
         */
        if (acessos.get(Constantes.PERMISSAO_IMPRIMIR_RELATORIO_BOLETINS_DIARIOS).isAcesso()) {
            setEnabledGUIElements.enabledJComponent(frame.menuItemBoletinsDiarios);
        } else {
            setEnabledGUIElements.disabledJComponent(frame.menuItemBoletinsDiarios);
        }

        /*
         * Desabilita o menu de relatórios caso nenhuma permissão de impressão
         * seja permitida
         */
        if (!(acessos.get(Constantes.PERMISSAO_IMPRIMIR_RELATORIO_DENSIDADE_VETORIAL).isAcesso()
                || acessos.get(Constantes.PERMISSAO_IMPRIMIR_RELATORIO_RESUMO_SEMANAL_BOLETINS).isAcesso()
                || acessos.get(Constantes.PERMISSAO_IMPRIMIR_RELATORIO_TRANSACOES_USUARIOS).isAcesso()
                || acessos.get(Constantes.PERMISSAO_IMPRIMIR_RELATORIO_BOLETINS_DIARIOS).isAcesso())) {
            setEnabledGUIElements.disabledJComponent(frame.menuRelatorio);
        }

        return true;
    }

    /**
     * Recupera no banco de dados as permissões de acessos para
     *
     * @user
     *
     * @return - retorna o sucesso da operação
     */
    private static boolean getPermissaoUsuarioUser() {

        acessos = AbstractDAO.consultar("Acessos", "idAgente=" + user.getIdAgente());

        return true;
    }

    /**
     * Configura o sistema e o bd_segurança para o primeiro acesso.
     */
    private boolean primeiroAcesso() {

        try {

            //Variáveis para criação do primeiro usuário
            List<Agente> listUsuarios = AbstractDAO.listar("Agente");
            //Caso não exista nenhum usuário registrado no bd
            while (listUsuarios.size() < 1) {

                //Cria um usuário do sistema
                user = new Agente(0, "Administrador", true, "Administrador", "AdminRoot12", Datas.getDataHoje(), Horas.getHoraAgora(), 0, 0);
                AbstractDAO.cadastrar(user);
                listUsuarios = AbstractDAO.listar("Agente");
            }

            conectaUsuario(listUsuarios.get(0));

            //Cria as permissões do sistema caso elas ainda não exista no banco de dados
            List<Permissao> ListPermissoes = AbstractDAO.listar("Permissao");
            if (ListPermissoes.size() < Constantes.NUMERO_DE_PERMISSOES) {
                //Grava no bd as permissões do sistema
                if (AbstractDAO.listar("Permissao").isEmpty()) {
                    AbstractDAO.cadastrar(new Permissao("Altera preferências"));
                    AbstractDAO.cadastrar(new Permissao("Consulta boletim de tratamento"));
                    AbstractDAO.cadastrar(new Permissao("Cadastra/Altera boletim de tratamento"));
                    AbstractDAO.cadastrar(new Permissao("Exclui boletim de tratamento"));
                    AbstractDAO.cadastrar(new Permissao("Consulta boletim de pesquisa"));
                    AbstractDAO.cadastrar(new Permissao("Cadastra/Altera boletim de pesquisa"));
                    AbstractDAO.cadastrar(new Permissao("Exclui boletim de pesquisa"));
                    AbstractDAO.cadastrar(new Permissao("Consulta locais"));
                    AbstractDAO.cadastrar(new Permissao("Cadastra/Altera locais"));
                    AbstractDAO.cadastrar(new Permissao("Exclui locais"));
                    AbstractDAO.cadastrar(new Permissao("Consulta croqui"));
                    AbstractDAO.cadastrar(new Permissao("Cadastra/Altera croqui"));
                    AbstractDAO.cadastrar(new Permissao("Exclui croqui"));
                    AbstractDAO.cadastrar(new Permissao("Consulta usuarios"));
                    AbstractDAO.cadastrar(new Permissao("Cadastra/Altera usuarios"));
                    AbstractDAO.cadastrar(new Permissao("Consulta laboratório"));
                    AbstractDAO.cadastrar(new Permissao("Cadastra/Altera laboratório"));
                    AbstractDAO.cadastrar(new Permissao("Imprimir relatório de densidade vetorial"));
                    AbstractDAO.cadastrar(new Permissao("Imprimir relatório de transações de usuários"));
                    AbstractDAO.cadastrar(new Permissao("Imprimir relatório de resumo semanal de boletins"));
                    AbstractDAO.cadastrar(new Permissao("Imprimir relatório de boletins diários"));

                    JOptionPane.showMessageDialog(frame, "Permissões do sistema criadas com sucesso!", "Configurando o primeiro acesso ao sistema.", JOptionPane.INFORMATION_MESSAGE);

                    //Cria uma instancia padrao de configuracao do Sistema
                    AbstractDAO.cadastrar(new Configuracao(1, 40500, 0, "Ainda não Preenchido."));

                } else {
                    JOptionPane.showMessageDialog(frame, "Não foi possível criar todas as permissões do sistema.\nFavor contactar o administrador do sistema!", "ERRO!", JOptionPane.ERROR_MESSAGE);
                    System.exit(1);

                }

            }

            //Verifica se System User já tem seus acessos configurados
            List<Acessos> listAcessos = AbstractDAO.consultar("from Acessos a left join fetch a.agente g where g.idAgente=" + user.getIdAgente());

            if (listAcessos.size() < Constantes.NUMERO_DE_PERMISSOES) {
                //Configura os acessos de System User
                if (ControleUsuariosAgentes.configuraAcessosAdministrador(this.user)) {
                    JOptionPane.showMessageDialog(frame, "Acessos para o Administrador do sistema criados com sucesso!", "Configurando o primeiro acesso.", JOptionPane.INFORMATION_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(frame, "Erro ao criar os acessos para o Administrador do sistema!",
                            "Configurando o primeiro acesso.",
                            JOptionPane.ERROR_MESSAGE);
                    System.exit(1);
                }
            }

            return true;

        } catch (Exception er) {
            er.printStackTrace();
            System.exit(1);
            return false;
        }
    }

    /**
     * Verifica no arquivo "Preferências.conf" as transações que podem ser
     * excluída
     *
     * @return
     */
    public boolean eliminaTransacoesVencidas() {

        //Busca no bd o número de dias máximos para vencimento
        Configuracao conf = (Configuracao) AbstractDAO.consultar("Configuracao", "id=1").get(0);
        int diasMaximos = conf.getDiasValidadeLog();

        //Se a opção for nunca, ou seja, zero, não é realizada exclusão de transações
        if (diasMaximos > 0) {
            //Apaga as transações que tem mais dias do que o definido
            TransacaoDAO.excluir(Datas.subDias(new java.sql.Date(System.currentTimeMillis()), diasMaximos));
        }

        return true;
    }

    /**
     * Abre o frame interno de login
     */
    public static void abreIFLogin() {

        //Chama Frame de Login
        IFLogin login = new IFLogin();
        FramePrincipal.desktopPanel.add(login);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(login);
    }

    /**
     * Realiza o login do usuario no sistema
     */
    public static void login() {

        //Inicializa acessos para o usuário em @FramePrincipal
        if (ControleFramePrincipal.verificaAcessos()) {

            //Configura o comportamento da interface
            FramePrincipal.buttonLogin.setEnabled(false);
            FramePrincipal.buttonLogoff.setEnabled(true);

        } else {
            JOptionPane.showMessageDialog(frame, "Não foi possível inicializar os acessos do usuário a partir de suas pemissões.\n"
                    + "Favor contactar o administrador do sistema.",
                    "Erro!", JOptionPane.ERROR_MESSAGE);
        }
    }

    /**
     * Realiza o logoff do usuario
     */
    public static void logoff() {

        //Pergunta se o cliente realmente deseja cadastrar a transação*
        int opcao = JOptionPane.showOptionDialog(null, "Tem certeza que efetuar logoff?", "Logoff", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, botoesOpcoes, botoesOpcoes[0]);

        //Realiza o logoff e abre o IF de Login
        if (opcao == JOptionPane.YES_OPTION) {
            desconectaUsuario();
            abreIFLogin();
        }
    }

    /**
     * DAQUI PARA BAIXO TODOS OS MÉTODOS SÃO DE EVENTOS DE ABRIR INTERNAL FRAMES
     */
    public void menuItemUsuariosGerenciarActionPerformed() {
        /*
         * Abre no desktopPane o frame interno para gerenciamento de
         * Agentes/Usuários
         */
        IFUsuariosAgentes iFrame = new IFUsuariosAgentes();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }

    public void menuItemUsuariosAlterarSenhaActionPerformed() {
        IFAlteraSenha iFrame = new IFAlteraSenha();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }

    public void menuItemMunicipioActionPerformed() {
        IFMunicipios iFrame = new IFMunicipios();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemLocalidadeActionPerformed() {                                                   
        IFLocalidades iFrame = new IFLocalidades();
        FramePrincipal.desktopPanel.add(iFrame);

        /*
         * Focaliza o novo JInternalFrame
         */
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemQuadraActionPerformed() {                                               
        IFQuadras iFrame = new IFQuadras();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemLograouroActionPerformed() {                                                  
        IFLogradouros iFrame = new IFLogradouros();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemImovelActionPerformed() {                                               
        IFImoveis iFrame = new IFImoveis();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemBoletinsTratamentoActionPerformed() {                                                           
        IFBoletimTratamento iFrame = new IFBoletimTratamento();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemBoletinsPesquisaActionPerformed() {                                                         
        IFBoletimPesquisa iFrame = new IFBoletimPesquisa();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemLabBoletinsPendentesActionPerformed() {                                                             
        IFBoletinsPendentes iFrame = new IFBoletinsPendentes();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuSincronizacaoActionPerformed() {                                                  
        if (qtdIFSinc == 0) {
            gui.frames.internos.IFSincronizacao iFrame = new gui.frames.internos.IFSincronizacao();
            FramePrincipal.desktopPanel.add(iFrame);

            //Focaliza o novo JInternalFrame
            FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
            qtdIFSinc++;
        } else {
            JOptionPane.showMessageDialog(null, "Já existe uma janela de sincronização aberta.", "Atenção!", JOptionPane.INFORMATION_MESSAGE);
        }
    }
    
    public void menuItemLogUsuariosActionPerformed() {                                                    
        IFLogUsuarios iFrame = new IFLogUsuarios();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemBoletinsDiariosActionPerformed() {                                                        
        IFRelatorioBoletins iFrame = new IFRelatorioBoletins();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemResumoSemanalActionPerformed() {                                                      
        IFResumoSemanal iFrame = new IFResumoSemanal();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
    public void menuItemSobreActionPerformed() {                                              
        IFSobre iFrame = new IFSobre();
        FramePrincipal.desktopPanel.add(iFrame);

        //Focaliza o novo JInternalFrame
        FramePrincipal.desktopPanel.getDesktopManager().activateFrame(iFrame);
    }
    
}
